<?php
/**
 * Iterator 迭代器
 */

class MyIterator implements Iterator
{
    // 针对所有数组
    private $info = [
        'name', 'age', 'gender', 'height'
    ];

    /**
     * 3. 返回当前数组元素值
     */
    public function current()
    {
        return current($this->info);
    }

    /**
     * 5. 返回当前下标+1
     */
    public function next()
    {
        next($this->info);
    }

    /**
     * 4. 返回当前下标
     */
    public function key()
    {
        return key($this->info);
    }

    /**
     * 2. 判定数组下标对应的元素值是否存在
     */
    public function valid()
    {
        return isset($this->info[key($this->info)]);
    }

    /**
     * 1. 重置数组下标
     */
    public function rewind()
    {
        reset($this->info);
    }
}

$it = new MyIterator();

/**
 * 这里可以看出 迭代器的执行顺序
 * 1. rewind
 * 2. valid
 * 3. current
 * 4. key
 * echo 输出 元素值
 * 5. next  (循环步骤 2 - 5)
 */
foreach ($it as $key => $value) {
    var_dump($key, $value);
    echo "\n";
}


